package com.sigmatrix.h5.components;

import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

/**
 * 
 *@ClassName: RedisClient
 *@Description: redis工具类
 *@author MH
 *@date 2017年11月10日 下午2:34:29
 */
@Component
public class RedisClient {
	
	private RedisTemplate<String, String> template;
	
	private ValueOperations<String, String> ops;
	
	private final String REDIS_KEY_PREFFIX = "";
	
	@Autowired
	RedisClient(RedisTemplate<String, String> redisTemplate){
		template = redisTemplate;
		ops = redisTemplate.opsForValue();
	}
	
	/**
	 * 
	 *@Title: get
	 *@Description: 
	 *@return String
	 *@author MH
	 *@date 2017年9月22日 下午6:14:14
	 *@param key
	 *@return
	 */
	public String get(String key){
		return ops.get(REDIS_KEY_PREFFIX+key);
	}
	/**
	 * 
	 *@Title: set
	 *@Description: 默认保存一周
	 *@return void
	 *@author MH
	 *@date 2017年9月22日 下午6:22:17
	 *@param key
	 *@param value
	 */
	public void set(String key,String value){
		set(key, value, 24*30);
	}
	/**
	 * 
	 *@Title: set
	 *@Description: 
	 *@return void
	 *@author MH
	 *@date 2017年9月22日 下午6:21:18
	 *@param key
	 *@param value
	 *@param expire 以小时为单位
	 */
	public void set(String key,String value,long expire){
		set(key, value, expire, TimeUnit.HOURS);
	}
	
	/**
	 * 
	 *@Title: set
	 *@Description: 
	 *@return void
	 *@author MH
	 *@date 2017年10月10日 下午4:54:50
	 *@param key
	 *@param value
	 *@param expire
	 *@param timeUnit
	 */
	public void set(String key,String value,long expire,TimeUnit timeUnit){
		if(expire > 0)
			ops.set(REDIS_KEY_PREFFIX+key, value, expire, timeUnit);
		else
			ops.set(REDIS_KEY_PREFFIX+key, value);
	}
	
	public void delete(String key) {
		template.delete(key);
	}
	
	/**
	 * 设置失效时间
	 * 
	 * @param key 
	 * @param timeout 失效时间
	 * @param timeUnit 时间单位
	 */
	public void expire(String key,Long timeout,TimeUnit timeUnit) {
		template.expire(key, timeout, timeUnit);
	}
	
	/**
	 * 判断key是否存在
	 * 
	 * @param key
	 * @return boolean
	 */
	public boolean hasKey(String key) {
		return template.hasKey(key);
	}
}
